#define _CRT_SECURE_NO_WARNINGS 1
//寻找数组的中心下标
#include <stdio.h>
//思路一：错误思路
//int pivotIndex(int* nums, int numsSize)
//{
//    int i = 0;
//    int rsum = 0;
//    int lsum = 0;
//    //中心下标在最左端
//    for (i = 1; i < numsSize; i++)
//    {
//        rsum += *(nums + i);
//    }
//    //中心下标在最右端  
//    for (i = 0; i < numsSize - 1; i++)
//    {
//        lsum += *(nums + i);
//    }
//    if (rsum == 0)
//    {
//        return 0;
//    }
//    if (lsum == 0)
//    {
//        return numsSize - 1;
//    }
//    //其他情况
//    int left = 0;
//    int right = 0;
//    for (i = 0; i < numsSize; i++)
//    {
//        left += *(nums + i);
//        int j = 0;
//        for (j = numsSize - 1; j > 0; j--)
//        {
//            right += *(nums + j);
//            if (left == right)
//            {
//
//            }
//        }
//    }
//}
//思路二：正确
//int pivotIndex(int* nums, int numsSize)
//{
//    int centresub = 0;
//    int i = 0;
//    int sum = 0;
//    int j = 0;
//    int flag = 0;
//    for (i = 0; i < numsSize; i++)
//    {
//        centresub = i;
//        //中心下标在最左端
//        if (centresub == 0)
//        {
//            sum = 0;
//            for (j = 1; j < numsSize; j++)
//            {
//                sum += *(nums + j);
//            }
//            if (sum == 0)
//            {
//                flag = 1;
//                break;
//            }
//        }
//        //中心下标在最右端
//        else if (centresub == numsSize - 1)
//        {
//            sum = 0;
//            for (j = 0; j<numsSize-1; j++)
//            {
//                sum += *(nums + j);
//            }
//            if (sum == 0)
//            {
//                flag = 1;
//                break;
//            }
//        }
//        //中心下标在中间
//        else
//        {
//            int z = 0;
//            int Lsum = 0;//左侧之和
//            int Rsum = 0;//右侧之和
//            //计算中心下标左侧元素之和
//            for (j = 0; j < centresub; j++)
//            {
//                Lsum += *(nums + j);
//            }
//            //计算中心下标右侧元素之和
//            for (z = numsSize - 1; z > centresub; z--)
//            {
//                Rsum += *(nums + z);
//            }
//            if (Lsum == Rsum)
//            {
//                flag = 1;
//                break;
//            }
//        }
//    }
//    if (flag)
//    {
//        return centresub;
//    }
//    else
//    {
//        return -1;
//    }
//}

//思路三：
int pivotIndex(int* nums, int numsSize)
{
    int i = 0;
    int sum = 0;
    for (i = 0; i < numsSize; i++)
    {
        sum += *(nums + i);
    }
    int l_sum = 0;
    int r_sum = sum;
    for (i = 0; i < numsSize; i++)
    {
        r_sum -= *(nums + i);
        if (l_sum == r_sum)
        {
            return i;
        }
        l_sum += *(nums + i);
    }
    return -1;
}
int main()
{
    int nums[] = { 1, 7, 3, 6, 5, 6 };
    //int nums[] = {1,2,3};
    //int nums[] = { 2, 1, -1 };
    int numsSize = sizeof(nums) / sizeof(nums[0]);
    int ret = pivotIndex(nums, numsSize);
    printf("%d", ret);
    return 0;
}